<!doctype html>
<html class="default no-js">
<head>
	<meta charset="utf-8">
	<meta http-equiv="X-UA-Compatible" content="IE=edge">
	<title>@magenta/music</title>
	<meta name="description" content="">
	<meta name="viewport" content="width=device-width, initial-scale=1">
	<link rel="stylesheet" href="assets/css/main.css">
</head>
<body>
<header>
	<div class="tsd-page-toolbar">
		<div class="container">
			<div class="table-wrap">
				<div class="table-cell" id="tsd-search" data-index="assets/js/search.js" data-base=".">
					<div class="field">
						<label for="tsd-search-field" class="tsd-widget search no-caption">Search</label>
						<input id="tsd-search-field" type="text" />
					</div>
					<ul class="results">
						<li class="state loading">Preparing search index...</li>
						<li class="state failure">The search index is not available</li>
					</ul>
					<a href="index.html" class="title">@magenta/music</a>
				</div>
				<div class="table-cell" id="tsd-widgets">
					<div id="tsd-filter">
						<a href="#" class="tsd-widget options no-caption" data-toggle="options">Options</a>
						<div class="tsd-filter-group">
							<div class="tsd-select" id="tsd-filter-visibility">
								<span class="tsd-select-label">All</span>
								<ul class="tsd-select-list">
									<li data-value="public">Public</li>
									<li data-value="protected">Public/Protected</li>
									<li data-value="private" class="selected">All</li>
								</ul>
							</div>
							<input type="checkbox" id="tsd-filter-inherited" checked />
							<label class="tsd-widget" for="tsd-filter-inherited">Inherited</label>
							<input type="checkbox" id="tsd-filter-only-exported" />
							<label class="tsd-widget" for="tsd-filter-only-exported">Only exported</label>
						</div>
					</div>
					<a href="#" class="tsd-widget menu no-caption" data-toggle="menu">Menu</a>
				</div>
			</div>
		</div>
	</div>
	<div class="tsd-page-title">
		<div class="container">
			<ul class="tsd-breadcrumb">
				<li>
					<a href="globals.html">Globals</a>
				</li>
			</ul>
			<h1> @magenta/music</h1>
		</div>
	</div>
</header>
<div class="container container-main">
	<div class="row">
		<div class="col-8 col-content">
			<div class="tsd-panel tsd-typography">
				<h1 id="-magenta-music">@magenta/music</h1>
				<p><a href="https://badge.fury.io/js/%40magenta%2Fmusic"><img src="https://badge.fury.io/js/%40magenta%2Fmusic.svg" alt="npm version"></a> <a href="https://www.jsdelivr.com/package/npm/@magenta/music"><img src="https://data.jsdelivr.com/v1/package/npm/@magenta/music/badge?style=rounded" alt=""></a></p>
				<p>This JavaScript implementation of Magenta&#39;s musical note-based models uses <a href="https://js.tensorflow.org">TensorFlow.js</a> for GPU-accelerated inference.</p>
				<p>Complete documentation is available at <a href="https://tensorflow.github.io/magenta-js/music">https://tensorflow.github.io/magenta-js/music</a>.</p>
				<p>For the Python TensorFlow implementations, see the <a href="https://github.com/tensorflow/magenta">main Magenta repo</a>.</p>
				<h2 id="contents">Contents</h2>
				<ul>
					<li><a href="#example-applications">Example Applications</a></li>
					<li><a href="#supported-models">Supported Models</a></li>
					<li><a href="#getting-started">Getting Started</a></li>
					<li><a href="#model-checkpoints">Model Checkpoints</a></li>
				</ul>
				<h2 id="example-applications">Example Applications</h2>
				<p>Here are a few applications built with <code>@magenta/music</code>:</p>
				<ul>
					<li><a href="https://piano-scribe.glitch.me">Piano Scribe</a> by <a href="https://github.com/notwaldorf">Monica Dinculescu</a> and <a href="https://github.com/adarob">Adam Roberts</a></li>
					<li><a href="https://g.co/beatblender">Beat Blender</a> by <a href="https://github.com/googlecreativelab">Google Creative Lab</a></li>
					<li><a href="https://g.co/melodymixer">Melody Mixer</a> by <a href="https://github.com/googlecreativelab">Google Creative Lab</a></li>
					<li><a href="https://goo.gl/magenta/latent-loops">Latent Loops</a> by <a href="https://github.com/teampieshop">Google Pie Shop</a></li>
					<li><a href="https://goo.gl/magenta/neuraldrum">Neural Drum Machine</a> by <a href="https://github.com/teropa">Tero Parviainen</a></li>
					<li><a href="https://tenori-off.glitch.me">Tenori-Off</a> by <a href="https://github.com/notwaldorf">Monica Dinculescu</a></li>
				</ul>
				<p>You can also try our <a href="https://tensorflow.github.io/magenta-js/music/demos">hosted demos</a> for each model and have a look at the <a href="./demos">demo code</a>.</p>
				<h2 id="supported-models">Supported Models</h2>
				<p>We have made an effort to port our most useful models, but please file an issue if you think something is
				missing, or feel free to submit a Pull Request!</p>
				<h3 id="piano-transcription-w-onsets-and-frames">Piano Transcription w/ Onsets and Frames</h3>
				<p><a href="https://tensorflow.github.io/magenta-js/music/classes/_transcription_model_.onsetsandframes.html">OnsetsAndFrames</a> implements Magenta&#39;s <a href="g.co/magenta/onsets-frames">piano transcription model</a> for converting raw audio to MIDI in the browser. While it is somewhat flexible, it works best on solo piano recordings. The algorithm takes half the duration of audio to run on most browsers, but due to a <a href="https://github.com/WebKit/webkit/blob/4a4870b75b95a836b516163d45a5cbd6f5222562/Source/WebCore/Modules/webaudio/AudioContext.cpp#L109">Webkit bug</a>, audio resampling will make this it significantly slower on Safari.</p>
				<p><strong>Demo Application:</strong> <a href="https://piano-scribe.glitch.me">Piano Scribe</a></p>
				<h3 id="musicrnn">MusicRNN</h3>
				<p><a href="https://tensorflow.github.io/magenta-js/music/classes/_music_rnn_model_.musicrnn.html">MusicRNN</a> implements Magenta&#39;s LSTM-based language models. These include <a href="https://github.com/tensorflow/magenta/tree/master/magenta/models/melody_rnn">MelodyRNN</a>, <a href="https://github.com/tensorflow/magenta/tree/master/magenta/models/drums_rnn">DrumsRNN</a>, <a href="https://github.com/tensorflow/magenta/tree/master/magenta/models/improv_rnn">ImprovRNN</a>, and <a href="https://github.com/tensorflow/magenta/tree/master/magenta/models/performance_rnn">PerformanceRNN</a>.</p>
				<p><strong>Demo Application:</strong> <a href="https://goo.gl/magenta/neuraldrum">Neural Drum Machine</a></p>
				<h3 id="musicvae">MusicVAE</h3>
				<p><a href="https://tensorflow.github.io/magenta-js/music/classes/_music_vae_model_.musicvae.html">MusicVAE</a> implements several configurations of Magenta&#39;s variational autoencoder model called <a href="https://g.co/magenta/musicvae">MusicVAE</a> including melody and drum &quot;loop&quot; models, 4- and 16-bar &quot;trio&quot; models, chord-conditioned <a href="https://g.co/magenta/multitrack">multi-track</a> models, and drum performance &quot;humanizations&quot; with [GrooVAE][<a href="https://g.co/magenta/groovae%5D">https://g.co/magenta/groovae]</a>.</p>
				<p><strong>Demo Application:</strong> <a href="https://goo.gl/magenta/endless-trios">Endless Trios</a></p>
				<h3 id="piano-genie">Piano Genie</h3>
				<p><a href="https://g.co/magenta/pianogenie">Piano Genie</a> is a VQ-VAE model that that maps 8-button input to a full 88-key piano in real time.</p>
				<p><strong>Demo Application:</strong> <a href="https://goo.gl/magenta/piano-genie">Piano Genie</a></p>
				<h2 id="getting-started">Getting started</h2>
				<p>There are two main ways to get MagentaMusic.js in your JavaScript project:
					via <a href="https://developer.mozilla.org/en-US/docs/Learn/HTML/Howto/Use_JavaScript_within_a_webpage">script tags</a> <strong>or</strong> by installing it from <a href="https://www.npmjs.com/">NPM</a>
				and using a build tool like <a href="https://yarnpkg.com/en/">yarn</a>.</p>
				<h3 id="via-script-tag">via Script Tag</h3>
				<p>Add the following code to an HTML file:</p>
				<pre><code class="language-html"><span class="hljs-tag">&lt;<span class="hljs-name">html</span>&gt;</span>
  <span class="hljs-tag">&lt;<span class="hljs-name">head</span>&gt;</span>
    <span class="hljs-comment">&lt;!-- Load @magenta/music --&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">script</span> <span class="hljs-attr">src</span>=<span class="hljs-string">"https://cdn.jsdelivr.net/npm/@magenta/music@^1.0.0"</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">script</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">script</span>&gt;</span><span class="javascript">
      <span class="hljs-comment">// Instantiate model by loading desired config.</span>
      <span class="hljs-keyword">const</span> model = <span class="hljs-keyword">new</span> mm.MusicVAE(
        <span class="hljs-string">'https://storage.googleapis.com/magentadata/js/checkpoints/music_vae/trio_4bar'</span>);
      <span class="hljs-keyword">const</span> player = <span class="hljs-keyword">new</span> mm.Player();

      <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">play</span>(<span class="hljs-params"></span>) </span>{
        player.resumeContext(); <span class="hljs-comment">// enable audio</span>
        model.sample(<span class="hljs-number">1</span>)
          .then(<span class="hljs-function">(<span class="hljs-params">samples</span>) =&gt;</span> player.start(samples[<span class="hljs-number">0</span>], <span class="hljs-number">80</span>));
      }
    </span><span class="hljs-tag">&lt;/<span class="hljs-name">script</span>&gt;</span>
  <span class="hljs-tag">&lt;/<span class="hljs-name">head</span>&gt;</span>
  <span class="hljs-tag">&lt;<span class="hljs-name">body</span>&gt;</span><span class="hljs-tag">&lt;<span class="hljs-name">button</span> <span class="hljs-attr">onclick</span>=<span class="hljs-string">"play()"</span>&gt;</span><span class="hljs-tag">&lt;<span class="hljs-name">h1</span>&gt;</span>Play Trio<span class="hljs-tag">&lt;/<span class="hljs-name">h1</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">button</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">body</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">html</span>&gt;</span></code></pre>
				<p>Open up that html file in your browser (or <a href="https://goo.gl/magenta/simpletrio">click here</a> for a hosted version)
				and the code will run. Click the &quot;Play Trio&quot; button to hear 4-bar trios that are randomly generated by MusicVAE.</p>
				<p>It&#39;s also easy to add the ability to download MIDI for generated outputs, which is demonstrated in <a href="https://goo.gl/magenta/simpletriodl">this example</a>.</p>
				<h3 id="via-npm">via NPM</h3>
				<p>Add <a href="https://www.npmjs.com/package/@magenta/music">MagentaMusic.js</a> to your project using <a href="https://yarnpkg.com/en/">yarn</a> <strong>or</strong> <a href="https://docs.npmjs.com/cli/npm">npm</a>.
				For example, with yarn you can simply call <code>yarn add @magenta/music</code>.</p>
				<p>Then, you can use the library in your own code as in the following example:</p>
				<pre><code class="language-js"><span class="hljs-keyword">import</span> * <span class="hljs-keyword">as</span> mm <span class="hljs-keyword">from</span> <span class="hljs-string">'@magenta/music'</span>;

<span class="hljs-keyword">const</span> model = <span class="hljs-keyword">new</span> mm.MusicVAE(<span class="hljs-string">'/path/to/checkpoint'</span>);
<span class="hljs-keyword">const</span> player = <span class="hljs-keyword">new</span> mm.Player();

model
  .initialize()
  .then(<span class="hljs-function"><span class="hljs-params">()</span> =&gt;</span> model.sample(<span class="hljs-number">1</span>))
  .then(<span class="hljs-function"><span class="hljs-params">samples</span> =&gt;</span> {
    player.resumeContext();
    player.start(samples[<span class="hljs-number">0</span>])
  });</code></pre>
				<p>See our <a href="./demos">demos</a> for example usage.</p>
				<h4 id="example-commands">Example Commands</h4>
				<p><code>yarn install</code> to install dependencies.</p>
				<p><code>yarn test</code> to run tests.</p>
				<p><code>yarn bundle</code> to produce a bundled version in <code>dist/</code>.</p>
				<p><code>yarn run-demos</code> to build and serve the demos, with live reload.</p>
				<p><em>(Note: the default behavior is to build/watch all demos - specific demos can be built by passing a comma-separated list of specific demo names as follows: <code>yarn run-demos --demos=transcription,visualizer</code>)</em></p>
				<h2 id="model-checkpoints">Model Checkpoints</h2>
				<p>Since MagentaMusic.js does not support training models, you must use weights from a model trained with the Python-based <a href="https://github.com/tensorflow/magenta/tree/master/magenta/models">Magenta models</a>. We are also making available our own hosted pre-trained checkpoints.</p>
				<h3 id="magenta-hosted-checkpoints">Magenta-Hosted Checkpoints</h3>
				<p>Several pre-trained MusicRNN and MusicVAE checkpoints are hosted on GCS. The full list can is available in <a href="https://github.com/tensorflow/magenta-js/blob/master/music/checkpoints/README.md#table">this table</a> and can be accessed programmatically via a JSON index at <a href="https://goo.gl/magenta/js-checkpoints-json">https://goo.gl/magenta/js-checkpoints-json</a>.</p>
				<p>More information is available at <a href="https://goo.gl/magenta/js-checkpoints">https://goo.gl/magenta/js-checkpoints</a>.</p>
				<h3 id="your-own-checkpoints">Your Own Checkpoints</h3>
				<h4 id="dumping-your-weights">Dumping Your Weights</h4>
				<p>To use your own checkpoints with one of our models, you must first convert the weights to the appropriate format using the provided <a href="https://github.com/tensorflow/magenta-js/blob/master/scripts/checkpoint_converter.py">checkpoint_converter</a> script.</p>
				<p>This tool is dependent on <a href="https://github.com/tensorflow/tfjs-converter">tfjs-converter</a>, which you must first install using <code>pip install tensorflowjs</code>. Once installed, you can execute the script as follows:</p>
				<pre><code class="language-bash">../scripts/checkpoint_converter.py /path/to/model.ckpt /path/to/output_dir</code></pre>
				<p>There are additonal flags available to reduce the size of the output by removing unused (training) variables or using weight quantization. Call <code>../scripts/checkpoint_converter.py -h</code> to list the avilable options.</p>
				<h4 id="specifying-the-model-configuration">Specifying the Model Configuration</h4>
				<p>The model configuration should be placed in a JSON file named <code>config.json</code> in the same directory as your checkpoint. This configuration file contains all the information needed (besides the weights) to instantiate and run your model: the model type and data converter specification plus optional chord encoding, auxiliary inputs, and attention length. An example <code>config.json</code> file might look like:</p>
				<pre><code class="language-json">{
  <span class="hljs-attr">"type"</span>: <span class="hljs-string">"MusicRNN"</span>,
  <span class="hljs-attr">"dataConverter"</span>: {
    <span class="hljs-attr">"type"</span>: <span class="hljs-string">"MelodyConverter"</span>,
    <span class="hljs-attr">"args"</span>: {
      <span class="hljs-attr">"minPitch"</span>: <span class="hljs-number">48</span>,
      <span class="hljs-attr">"maxPitch"</span>: <span class="hljs-number">83</span>
    }
  },
  <span class="hljs-attr">"chordEncoder"</span>: <span class="hljs-string">"PitchChordEncoder"</span>
}</code></pre>
				<p>This configuration corresponds to a chord-conditioned melody MusicRNN model.</p>
				<h2 id="soundfonts">SoundFonts</h2>
				<p>There are several SoundFonts that you can use with the <code>mm.SoundFontPlayer</code>,
				for more realistic sounding instruments:</p>
				<p>| Instrument  | URL | License  |
					|---|---|---|---|
					| Piano | <a href="https://storage.googleapis.com/magentadata/js/soundfonts/salamander">salamander</a> |Audio samples from <a href="https://archive.org/details/SalamanderGrandPianoV3">Salamander Grand Piano</a>|
					| Multi | <a href="https://storage.googleapis.com/magentadata/js/soundfonts/sgm_plus">sgm_plus</a> | Audio samples based on <a href="https://www.polyphone-soundfonts.com/en/files/27-instrument-sets/256-sgm-v2-01">SGM</a> with modifications by <a href="https://sites.google.com/site/soundfonts4u/">John Nebauer</a>|
				| Percussion | <a href="https://storage.googleapis.com/magentadata/js/soundfonts/jazz_kit">jazz_kit</a> | Audio samples from <a href="https://musical-artifacts.com/artifacts/686">Jazz Kit (EXS)</a> by Lithalean |</p>
				<!-- links -->
			</div>
		</div>
		<div class="col-4 col-menu menu-sticky-wrap menu-highlight">
			<nav class="tsd-navigation primary">
				<ul>
					<li class="globals  ">
						<a href="globals.html"><em>Globals</em></a>
					</li>
					<li class=" tsd-kind-external-module">
						<a href="modules/_coconet_coconet_utils_.html">"coconet/coconet_<wbr>utils"</a>
					</li>
					<li class=" tsd-kind-external-module">
						<a href="modules/_coconet_model_.html">"coconet/model"</a>
					</li>
					<li class=" tsd-kind-external-module">
						<a href="modules/_core_audio_utils_.html">"core/audio_<wbr>utils"</a>
					</li>
					<li class=" tsd-kind-external-module">
						<a href="modules/_core_aux_inputs_.html">"core/aux_<wbr>inputs"</a>
					</li>
					<li class=" tsd-kind-external-module">
						<a href="modules/_core_chords_.html">"core/chords"</a>
					</li>
					<li class=" tsd-kind-external-module">
						<a href="modules/_core_constants_.html">"core/constants"</a>
					</li>
					<li class=" tsd-kind-external-module">
						<a href="modules/_core_data_.html">"core/data"</a>
					</li>
					<li class=" tsd-kind-external-module">
						<a href="modules/_core_logging_.html">"core/logging"</a>
					</li>
					<li class=" tsd-kind-external-module">
						<a href="modules/_core_midi_io_.html">"core/midi_<wbr>io"</a>
					</li>
					<li class=" tsd-kind-external-module">
						<a href="modules/_core_performance_.html">"core/performance"</a>
					</li>
					<li class=" tsd-kind-external-module">
						<a href="modules/_core_player_.html">"core/player"</a>
					</li>
					<li class=" tsd-kind-external-module">
						<a href="modules/_core_recorder_.html">"core/recorder"</a>
					</li>
					<li class=" tsd-kind-external-module">
						<a href="modules/_core_sequences_.html">"core/sequences"</a>
					</li>
					<li class=" tsd-kind-external-module">
						<a href="modules/_core_soundfont_.html">"core/soundfont"</a>
					</li>
					<li class=" tsd-kind-external-module">
						<a href="modules/_core_visualizer_.html">"core/visualizer"</a>
					</li>
					<li class=" tsd-kind-external-module">
						<a href="modules/_gansynth_audio_utils_.html">"gansynth/audio_<wbr>utils"</a>
					</li>
					<li class=" tsd-kind-external-module">
						<a href="modules/_gansynth_constants_.html">"gansynth/constants"</a>
					</li>
					<li class=" tsd-kind-external-module">
						<a href="modules/_gansynth_custom_layers_.html">"gansynth/custom_<wbr>layers"</a>
					</li>
					<li class=" tsd-kind-external-module">
						<a href="modules/_gansynth_mel_sparse_coeffs_.html">"gansynth/mel_<wbr>sparse_<wbr>coeffs"</a>
					</li>
					<li class=" tsd-kind-external-module">
						<a href="modules/_gansynth_model_.html">"gansynth/model"</a>
					</li>
					<li class=" tsd-kind-external-module">
						<a href="modules/_music_rnn_attention_.html">"music_<wbr>rnn/attention"</a>
					</li>
					<li class=" tsd-kind-external-module">
						<a href="modules/_music_rnn_model_.html">"music_<wbr>rnn/model"</a>
					</li>
					<li class=" tsd-kind-external-module">
						<a href="modules/_music_vae_midi_me_.html">"music_<wbr>vae/midi_<wbr>me"</a>
					</li>
					<li class=" tsd-kind-external-module">
						<a href="modules/_music_vae_model_.html">"music_<wbr>vae/model"</a>
					</li>
					<li class=" tsd-kind-external-module">
						<a href="modules/_piano_genie_model_.html">"piano_<wbr>genie/model"</a>
					</li>
					<li class=" tsd-kind-external-module">
						<a href="modules/_transcription_audio_utils_.html">"transcription/audio_<wbr>utils"</a>
					</li>
					<li class=" tsd-kind-external-module">
						<a href="modules/_transcription_constants_.html">"transcription/constants"</a>
					</li>
					<li class=" tsd-kind-external-module">
						<a href="modules/_transcription_model_.html">"transcription/model"</a>
					</li>
					<li class=" tsd-kind-external-module">
						<a href="modules/_transcription_transcription_utils_.html">"transcription/transcription_<wbr>utils"</a>
					</li>
				</ul>
			</nav>
			<nav class="tsd-navigation secondary menu-sticky">
				<ul class="before-current">
				</ul>
			</nav>
		</div>
	</div>
</div>
<footer class="with-border-bottom">
	<div class="container">
		<h2>Legend</h2>
		<div class="tsd-legend-group">
			<ul class="tsd-legend">
				<li class="tsd-kind-module"><span class="tsd-kind-icon">Module</span></li>
				<li class="tsd-kind-object-literal"><span class="tsd-kind-icon">Object literal</span></li>
				<li class="tsd-kind-variable"><span class="tsd-kind-icon">Variable</span></li>
				<li class="tsd-kind-function"><span class="tsd-kind-icon">Function</span></li>
				<li class="tsd-kind-function tsd-has-type-parameter"><span class="tsd-kind-icon">Function with type parameter</span></li>
				<li class="tsd-kind-index-signature"><span class="tsd-kind-icon">Index signature</span></li>
				<li class="tsd-kind-type-alias"><span class="tsd-kind-icon">Type alias</span></li>
			</ul>
			<ul class="tsd-legend">
				<li class="tsd-kind-enum"><span class="tsd-kind-icon">Enumeration</span></li>
				<li class="tsd-kind-enum-member"><span class="tsd-kind-icon">Enumeration member</span></li>
				<li class="tsd-kind-property tsd-parent-kind-enum"><span class="tsd-kind-icon">Property</span></li>
				<li class="tsd-kind-method tsd-parent-kind-enum"><span class="tsd-kind-icon">Method</span></li>
			</ul>
			<ul class="tsd-legend">
				<li class="tsd-kind-interface"><span class="tsd-kind-icon">Interface</span></li>
				<li class="tsd-kind-interface tsd-has-type-parameter"><span class="tsd-kind-icon">Interface with type parameter</span></li>
				<li class="tsd-kind-constructor tsd-parent-kind-interface"><span class="tsd-kind-icon">Constructor</span></li>
				<li class="tsd-kind-property tsd-parent-kind-interface"><span class="tsd-kind-icon">Property</span></li>
				<li class="tsd-kind-method tsd-parent-kind-interface"><span class="tsd-kind-icon">Method</span></li>
				<li class="tsd-kind-index-signature tsd-parent-kind-interface"><span class="tsd-kind-icon">Index signature</span></li>
			</ul>
			<ul class="tsd-legend">
				<li class="tsd-kind-class"><span class="tsd-kind-icon">Class</span></li>
				<li class="tsd-kind-class tsd-has-type-parameter"><span class="tsd-kind-icon">Class with type parameter</span></li>
				<li class="tsd-kind-constructor tsd-parent-kind-class"><span class="tsd-kind-icon">Constructor</span></li>
				<li class="tsd-kind-property tsd-parent-kind-class"><span class="tsd-kind-icon">Property</span></li>
				<li class="tsd-kind-method tsd-parent-kind-class"><span class="tsd-kind-icon">Method</span></li>
				<li class="tsd-kind-accessor tsd-parent-kind-class"><span class="tsd-kind-icon">Accessor</span></li>
				<li class="tsd-kind-index-signature tsd-parent-kind-class"><span class="tsd-kind-icon">Index signature</span></li>
			</ul>
			<ul class="tsd-legend">
				<li class="tsd-kind-constructor tsd-parent-kind-class tsd-is-inherited"><span class="tsd-kind-icon">Inherited constructor</span></li>
				<li class="tsd-kind-property tsd-parent-kind-class tsd-is-inherited"><span class="tsd-kind-icon">Inherited property</span></li>
				<li class="tsd-kind-method tsd-parent-kind-class tsd-is-inherited"><span class="tsd-kind-icon">Inherited method</span></li>
				<li class="tsd-kind-accessor tsd-parent-kind-class tsd-is-inherited"><span class="tsd-kind-icon">Inherited accessor</span></li>
			</ul>
			<ul class="tsd-legend">
				<li class="tsd-kind-property tsd-parent-kind-class tsd-is-protected"><span class="tsd-kind-icon">Protected property</span></li>
				<li class="tsd-kind-method tsd-parent-kind-class tsd-is-protected"><span class="tsd-kind-icon">Protected method</span></li>
				<li class="tsd-kind-accessor tsd-parent-kind-class tsd-is-protected"><span class="tsd-kind-icon">Protected accessor</span></li>
			</ul>
			<ul class="tsd-legend">
				<li class="tsd-kind-property tsd-parent-kind-class tsd-is-private"><span class="tsd-kind-icon">Private property</span></li>
				<li class="tsd-kind-method tsd-parent-kind-class tsd-is-private"><span class="tsd-kind-icon">Private method</span></li>
				<li class="tsd-kind-accessor tsd-parent-kind-class tsd-is-private"><span class="tsd-kind-icon">Private accessor</span></li>
			</ul>
			<ul class="tsd-legend">
				<li class="tsd-kind-property tsd-parent-kind-class tsd-is-static"><span class="tsd-kind-icon">Static property</span></li>
				<li class="tsd-kind-call-signature tsd-parent-kind-class tsd-is-static"><span class="tsd-kind-icon">Static method</span></li>
			</ul>
		</div>
	</div>
</footer>
<div class="container tsd-generator">
	<p>Generated using <a href="http://typedoc.org/" target="_blank">TypeDoc</a></p>
</div>
<div class="overlay"></div>
<script src="assets/js/main.js"></script>
<script>if (location.protocol == 'file:') document.write('<script src="assets/js/search.js"><' + '/script>');</script>
</body>
</html>